/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.helpdesk.dao;

import com.helpdesk.entidades.*;
import java.util.Date;
import java.util.List;
import javax.ejb.Stateless;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

/**
 *
 * @author Manuel
 */
@Stateless
public class HdTicketsFacade extends AbstractFacade<HdTickets> {
    @PersistenceContext(unitName = "WebAppHelpDeskPU")
    private EntityManager em;

    @Override
    protected EntityManager getEntityManager() {
        return em;
    }

    public HdTicketsFacade() {
        super(HdTickets.class);
    }

     public int getCountTicketsByUser(HdTickets Tickets){
        int cantidad_tickets = 0;
        Query q =em.createNamedQuery("HdTickets.CountTicketsByUser");  
        q.setParameter("codUsuario", Tickets.getCodUsuario());
        q.setParameter("codClasiBaja",Tickets.getCodClasiBaja());
        cantidad_tickets = Integer.parseInt(q.getSingleResult().toString());
        return cantidad_tickets;
    }
     
     public List<HdTickets> getTicketsByUser(HdTickets Tickets){
        Query q =em.createNamedQuery("HdTickets.ShowTicketsByUser");  
        q.setParameter("codUsuario", Tickets.getCodUsuario());
        q.setParameter("codClasiBaja",Tickets.getCodClasiBaja());
        return q.getResultList();
    }
    public List<HdTickets> getTicketByCodTecAndEstado(HdTecnicos tecnico,int codEstadoT){
        Query q = em.createNamedQuery("HdDetalleTicket.findByCodTecnicoAndEstado");
        q.setParameter("codTecnico", tecnico.getCodTecnico());
        q.setParameter("codEstado", codEstadoT);
        return q.getResultList();
    }
    public List<HdTickets> getTicketByCodJefe(HdTecnicos tecnico,int codEstado1, int codEstado2){
        Query q = em.createNamedQuery("HdTickets.ShowTicketsBycodJefeAndcodEstado");
        q.setParameter("codJefe", tecnico);
        q.setParameter("codEstado1", codEstado1);
        q.setParameter("codEstado2", codEstado2);
        return q.getResultList();
    }
     
     public List<HdTickets> buscarTodos() {
        Query q = em.createQuery("SELECT h FROM HdTickets h");
        return q.getResultList();
}
    //Metodo que devuelve true o false dependiendo si un tecnico
    //no tiene asignaciones para una fecha determinada 
    public boolean tecnicoDisponible (int codTecnico, Date fecha) {
        boolean vRetorno=false;
        List<HdDetalleTicket> lista = null;
        Query q =em.createNamedQuery("HdDetalleTicket.findByCodTecnicoDisp");  
        q.setParameter("codTecnico", codTecnico);
        q.setParameter("estado", "X");
        q.setParameter("fecha", fecha);
        
        lista=q.getResultList();
        if(lista.size()>0) 
            vRetorno=false;
        else
            vRetorno=true;
        
        return vRetorno;
    }
   public List<HdTickets> findAllTickets(){
       Query q=em.createNamedQuery("HdTickets.findAll");
       return q.getResultList();
   }
   public List<HdTickets> buscarShowTicketByTecnico(HdTecnicos codTecnico){
       Query q=em.createNamedQuery("HdDetalleTicket.findByCodTecnico");
       q.setParameter("codTecnico", codTecnico.getCodTecnico());
       return q.getResultList();
   }
   public List<HdTickets> TicketByTecnicoAndEstado(HdTecnicos codTecnico, int codEstado){
       Query q=em.createNamedQuery("HdDetalleTicket.findByCodTecnicoAndEstado");
       q.setParameter("codTecnico", codTecnico.getCodTecnico());
       q.setParameter("codEstado", codEstado);
       return q.getResultList();
   }
 
    //Metodo encargado de crear un query para relacionar cantidad de ticket por cada usuario.DURCORD
    public List<HdTickets> buscarShowTicketsBySolicitante(HdUsuarios codUsuario){
        Query q =em.createNamedQuery("HdTickets.ShowTicketsBySolicitante");  
        q.setParameter("codUsuario",codUsuario.getCodUsuario());
        return q.getResultList();
    }
    public List<HdTickets> buscarShowTicketsByAsesores(HdAsesor Asesor){
        Query q =em.createNamedQuery("HdTickets.ShowTicketsByAsesores");  
        q.setParameter("codAsesor",Asesor.getCodAsesor());
        return q.getResultList();
    }
    
    public List<HdTickets> ShowTicketsByEstado(HdEstados Estado){
        Query q =em.createNamedQuery("HdTickets.ShowTicketsByEstado");  
        q.setParameter("codEstado",Estado.getCodEstado());
        return q.getResultList();
    }
    
    public List<HdTickets> ShowTicketsJefe(HdEstados Estado, HdTecnicos Jefe){
        Query q =em.createNamedQuery("HdTickets.ShowTicketsJefe");  
        q.setParameter("codEstado",Estado.getCodEstado());
        q.setParameter("codJefe", Jefe);
        return q.getResultList();
    }
    
    public List<HdTickets> ShowTicketsUserCerrados(HdUsuarios user){
        Query q =em.createNamedQuery("HdTickets.ShowTicketsUserCerrados");  
        q.setParameter("codEstado", 7);
        q.setParameter("codUsuario", user);
        return q.getResultList();
    }
    
    public List<HdTickets> ShowTicketsUserPendientesCierre(HdUsuarios user){
        Query q =em.createNamedQuery("HdTickets.ShowTicketsUserCerrados");  
        q.setParameter("codEstado", 8);
        q.setParameter("codUsuario", user);
        return q.getResultList();
    }
    
    public void agregarTicket (HdTickets ticket) {
        System.out.println("Codigo del ticket: "+ticket.getCodTicket());
        em.persist(ticket);
    }
    
    
    public List<HdTickets> ShowTicketsUserPendientes(HdUsuarios user){
        Query q =em.createNamedQuery("HdTickets.ShowTicketsPendientes");  
        q.setParameter("codUsuario", user);
        return q.getResultList();
    }
}
